home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
basic
/
chaosexe.zip
/
XCIRCLE.TRU
< prev
next >
Wrap
Text File
|
1980-01-01
|
5KB
|
157 lines
!PROGRAM TITLE"XCIRCLE"
LIBRARY "SGLIB.TRC"
DECLARE DEF CIRCLE
DIM XINT(10),G(1),H(1)
CLEAR
PRINT" COMPREHENSIVE CIRCLE MAP PROGRAM"
PRINT
PRINT"CHOOSE ONE OF THE FOLLOWING OPTIONS FOR THE CIRCLE MAP:"
PRINT" 1)RETURN MAP"
PRINT" 2)BIFURCATION MAP"
PRINT" 3)DEVIL'S STAIRCASE"
INPUT PROMPT" CHOOSE 1,2,OR 3:":CHOICE
CLEAR
!
CALL LINPUTS(CHOICE,XIN,XINT(),NUMXINT,KVALUE,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM,ORDER,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
!
!GRAPHING SET-UP PROCEDURE
CALL SETXSCALE(XMIN,XMAX)
CALL SETYSCALE(YMIN,YMAX)
CALL SETAXES(0)
CALL SETTEXT(TITLE1$,HLABEL$,VLABEL$)
CALL RESERVELEGEND
DATA 0,0
CALL DATAGRAPH(G,H,0,0,"WHITE")
CALL GOTOCANVAS
!
IF CHOICE= 1 THEN CALL CALCULATION1(XIN,KVALUE,OMEGA,INITNUM,FINNUM,ORDER)
IF CHOICE= 2 THEN CALL CALCULATION2(NUMXINT,XINT,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM)
IF CHOICE= 3 THEN CALL CALCULATION3(XIN,INITNUM,FINNUM,INITK,FINK,STEPK,KVALUE)
!
SUB LINPUTS(CHOICE,XIN,XINT(),NUMXINT,KVALUE,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM,ORDER,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
IF CHOICE=2 THEN
INPUT PROMPT"INPUT NUMBER OF INITIAL CONDITIONS:":NUMXINT
FOR J = 1 TO NUMXINT
INPUT PROMPT"INPUT AN INITIAL CONDITION:":XINT(J)
NEXT J
ELSE
INPUT PROMPT"INPUT INITIAL ANGLE, [0,1] :":XIN
END IF
IF CHOICE = 3 THEN
INPUT PROMPT"INPUT INITIAL VALUE OF OMEGA (TRY 0):":INITK
INPUT PROMPT"INPUT FINAL VALUE OF OMEGA (TRY 1):":FINK
LET STEPK=(FINK-INITK)/740
INPUT PROMPT"INPUT K VALUE (TRY 0.95):":KVALUE
ELSE IF CHOICE=2 THEN
INPUT PROMPT"INPUT INITIAL VALUE OF K:":INITK
INPUT PROMPT"INPUT FINAL VALUE OF K:":FINK
LET STEPK=(FINK-INITK)/740
INPUT PROMPT"INPUT OMEGA VALUE:":OMEGA
END IF
INPUT PROMPT"INPUT NUMBER OF THROWAWAY ITERATIONS:":INITNUM
INPUT PROMPT"INPUT TOTAL NUMBER OF ITERATIONS:":FINNUM
IF CHOICE = 1 THEN
INPUT PROMPT"INPUT ORDER OF MAP:":ORDER
INPUT PROMPT"INPUT OMEGA VALUE:":OMEGA
INPUT PROMPT"INPUT K-VALUE:":KVALUE
LET XMIN=0
LET XMAX=1
LET YMIN=0
LET YMAX=1
LET TITLE1$="CIRCLE MAP"
LET TITLE2$="K="&STR$(KVALUE)&" OMEGA="&STR$(OMEGA)
LET VLABEL$="N+"&STR$(ORDER)&" ANGLE VALUE"
LET HLABEL$="N ANGLE VALUE"
END IF
IF CHOICE = 2 THEN
LET XMIN=INITK
LET XMAX=FINK
LET YMIN=0
LET YMAX=1
LET TITLE1$="CIRCLE MAP BIFURCATION DIAGRAM"
LET TITLE2$=""
LET VLABEL$="THETA"
LET HLABEL$="K-VALUE"
END IF
IF CHOICE=3 THEN
LET XMIN=INITK
LET XMAX=FINK
INPUT PROMPT"INPUT YMIN (USUALLY 0), AND YMAX (USUALLY 1):":YMIN,YMAX
LET TITLE1$="DEVIL'S STAIRCASE (CIRCLE MAP)"
LET TITLE2$="DRIVE K="&STR$(KVALUE)
LET VLABEL$="WINDING #"
LET HLABEL$="OMEGA"
END IF
END SUB
!
SUB CALCULATION1(XIN,KVALUE,OMEGA,INITNUM,FINNUM,ORDER)
PLOT LINES: 0,0;1,1 !PLOTS DIAGONAL
FOR I=O TO 1 STEP .001 !PLOTS CURVE
LET J=I
FOR ORD=1 TO ORDER
LET Z=CIRCLE(J,KVALUE,OMEGA)
LET J=Z
NEXT ORD
PLOT I,Z
NEXT I
LET X=XIN
LET Y=0
IF INITNUM=O THEN PLOT X,0;
FOR I=1 TO FINNUM
LET J=X
FOR ORD=1 TO ORDER
LET Y=CIRCLE(J,KVALUE,OMEGA)
LET J=Y
NEXT ORD
IF I>=INITNUM THEN
PLOT X,Y;
PLOT Y,Y;
END IF
LET X=Y
NEXT I
END SUB
!
SUB CALCULATION2(NUMXINT,XINT(),INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM)
FOR KVAL=INITK TO FINK STEP STEPK
FOR K=1 TO NUMXINT
LET X=XINT(K)
FOR I=1 TO FINNUM
LET Y=CIRCLE(X,KVAL,OMEGA)
IF I>INITNUM THEN
PLOT KVAL,Y
END IF
LET X=Y
NEXT I
NEXT K
NEXT KVAL
END SUB
!
SUB CALCULATION3(XIN,INITNUM,FINNUM,INITOMEGA,FINOMEGA,STEPOMEGA,KVALUE)
FOR OMEGA=INITOMEGA TO FINOMEGA STEP STEPOMEGA
LET SUM=0
LET X=XIN
FOR I=1 TO FINNUM
LET Y=X+OMEGA-(KVALUE/(2*PI))*SIN(2*PI*X)
IF I=INITNUM THEN LET X0=Y
LET X=Y
NEXT I
LET WINDING=(Y-X0)/(FINNUM-INITNUM)
IF WINDING <=YMAX THEN
IF WINDING >=YMIN THEN
PLOT OMEGA,WINDING
END IF
END IF
NEXT OMEGA
END SUB
!
DEF CIRCLE(X,KVALUE,OMEGA)
LET TEMPCIRCLE = X+OMEGA-(KVALUE/(2*PI))*SIN(2*PI*X)
LET CIRCLE = MOD(TEMPCIRCLE,1)
END DEF
GET KEY VARIABLE
CLEAR
PRINT "PRESS <ESC> FOR MENU"
END